// pages/login/forgetpassword/forgetpassword.js
/**
 * 密码重置页面
 * 功能：通过手机号验证码重置用户密码
 * 流程：1.输入手机号 → 2.验证码验证 → 3.设置新密码 → 4.完成重置
 */
import { reqResetPassData } from '../../../api/yonghu/resetPass'

Page({
  /**
   * 页面初始数据
   */
  data: {
    // 当前步骤：1-账号验证，2-设置新密码，3-完成
    currentStep: 1,
    
    // 表单数据
    account: '',         // 账号（用户名）
    newPassword: '',     // 新密码
    confirmPassword: '', // 确认密码
    
    // 表单验证状态
    accountValid: false, // 账号是否有效
    passwordValid: false, // 密码是否有效
    confirmValid: false, // 确认密码是否有效
    
    // 错误信息
    errorMessage: '',
    
    // 加载状态
    isLoading: false,
    
    // 密码显示状态
    showPassword: false,
    showConfirmPassword: false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('密码重置页面加载', options);
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 页面显示时的逻辑
  },

  /**
   * 账号输入事件
   */
  onAccountInput(e) {
    const account = e.detail.value;
    const accountValid = this.validateAccount(account);
    
    this.setData({
      account,
      accountValid,
      errorMessage: accountValid ? '' : '请输入正确的账号（3-32位，以字母或下划线开头）'
    });
  },


  /**
   * 新密码输入事件
   */
  onPasswordInput(e) {
    const newPassword = e.detail.value;
    const passwordValid = this.validatePassword(newPassword);
    
    this.setData({
      newPassword,
      passwordValid,
      errorMessage: passwordValid ? '' : '密码长度至少6位'
    });
  },

  /**
   * 确认密码输入事件
   */
  onConfirmPasswordInput(e) {
    const confirmPassword = e.detail.value;
    const confirmValid = this.validateConfirmPassword(confirmPassword);
    
    this.setData({
      confirmPassword,
      confirmValid,
      errorMessage: confirmValid ? '' : '两次密码输入不一致'
    });
  },

  /**
   * 验证账号并进入下一步
   */
  async verifyAccount() {
    if (!this.data.accountValid) {
      this.setData({ errorMessage: '请先输入正确的账号' });
      return;
    }

    this.setData({ isLoading: true, errorMessage: '' });

    try {
      // 模拟账号验证API调用
      await this.mockVerifyAccount(this.data.account);
      
      wx.showToast({
        title: '账号验证成功',
        icon: 'success'
      });
      
      // 进入下一步
      this.setData({ currentStep: 2 });
      
    } catch (error) {
      this.setData({ 
        errorMessage: error.message || '账号验证失败，请重试' 
      });
    } finally {
      this.setData({ isLoading: false });
    }
  },

  /**
   * 重置密码
   */
  async resetPassword() {
    if (!this.data.passwordValid || !this.data.confirmValid) {
      this.setData({ errorMessage: '请检查密码输入' });
      return;
    }

    this.setData({ isLoading: true, errorMessage: '' });

    try {
      // 调用密码重置API
      const {account, newPassword} = this.data
      const res = await reqResetPassData(account, newPassword);
      console.log('密码重置响应:', res);
      console.log('请求参数:', {account, newPassword});

      // 检查业务逻辑是否成功
      if (res && res.code === 0) {
        // 业务逻辑成功
        wx.showToast({
          title: '密码重置成功',
          icon: 'success'
        });
        
        // 更新本地存储的密码信息
        const userInfo = wx.getStorageSync('userInfo') || {};
        userInfo.password = newPassword;
        userInfo.hasPassword = true;
        // 更新session数据中的密码
        if (userInfo.sessionData) {
          userInfo.sessionData.password = newPassword;
        }
        wx.setStorageSync('userInfo', userInfo);
        
        // 进入完成步骤
        this.setData({ currentStep: 3 });
      } else {
        // 业务逻辑失败，抛出错误
        const errorMessage = res?.msg || res?.message || '密码重置失败';
        throw new Error(errorMessage);
      }
      
    } catch (error) {
      console.error('密码重置失败:', error);
      
      // 详细的错误信息处理
      let errorMessage = '重置失败，请重试';
      
      if (error && error.data) {
        // 如果后端返回了具体的错误信息
        errorMessage = error.data.msg || error.data.message || errorMessage;
      } else if (error && error.message) {
        // 网络错误或其他错误
        errorMessage = error.message;
      }
      
      // 特殊处理鉴权失败的情况
      if (errorMessage.includes('鉴权失败') || errorMessage.includes('请重新登录')) {
        errorMessage = '密码重置功能暂时不可用，请稍后重试';
      }
      
      this.setData({ 
        errorMessage: errorMessage
      });
      
      wx.showToast({
        title: errorMessage,
        icon: 'none',
        duration: 3000
      });
    } finally {
      this.setData({ isLoading: false });
    }
  },

  /**
   * 返回登录页
   */
  backToLogin() {
    wx.navigateTo({
      url: '/pages/login/login'
    });
  },

  /**
   * 重新开始
   */
  restart() {
    this.setData({
      currentStep: 1,
      account: '',
      newPassword: '',
      confirmPassword: '',
      accountValid: false,
      passwordValid: false,
      confirmValid: false,
      errorMessage: '',
      isLoading: false,
      showPassword: false,
      showConfirmPassword: false
    });
  },

  /**
   * 切换密码显示状态
   */
  togglePasswordVisibility() {
    this.setData({
      showPassword: !this.data.showPassword
    });
  },

  /**
   * 切换确认密码显示状态
   */
  toggleConfirmPasswordVisibility() {
    this.setData({
      showConfirmPassword: !this.data.showConfirmPassword
    });
  },

  /**
   * 验证账号（仅支持用户名格式）
   */
  validateAccount(account) {
    if (!account || account.length < 3) {
      return false;
    }
    
    // 用户名验证：^[a-z_][a-z0-9_-]{2,31}$
    const usernameRegex = /^[a-z_][a-z0-9_-]{2,31}$/;
    return usernameRegex.test(account);
  },


  /**
   * 验证密码
   */
  validatePassword(password) {
    return password.length >= 6;
  },

  /**
   * 验证确认密码
   */
  validateConfirmPassword(confirmPassword) {
    return confirmPassword === this.data.newPassword && confirmPassword.length >= 6;
  },

  /**
   * 模拟账号验证API
   */
  mockVerifyAccount(account) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        // 模拟失败情况
        if (account === 'notfound' || account === 'invalid') {
          reject(new Error('该账号不存在'));
        } else {
          resolve({ success: true });
        }
      }, 1000);
    });
  },

  /**
   * 模拟重置密码API
   */
  mockResetPassword(account, password) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        // 模拟成功
        resolve({ success: true });
      }, 1000);
    });
  }
});